﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;

namespace Uurrooster_opdracht
{
    public partial class FormDocenten : Form
    {
       //****************************************attributen
       DataClasses1DataContext DB;
       static List<tblDocent> LijstDocenten;
       static int index;    // index in welke rij we van de DBase bezig zijn.
      // static tblDocent docent;
       Boolean wegschrijven = false;
       
        public FormDocenten()
        {
            InitializeComponent();
            DB = new DataClasses1DataContext();
            LijstDocenten = DB.tblDocents.ToList();
            setWegschrijven(false);
            maakInfoLeeg();
            
        }

        private void FormDocenten_Load(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            buttonAdd.Enabled = false;
            setWegschrijven(false);
            buttonFirst_Click(null, null);
        }
        //*************************************************************methoden voor knoppen
        //FIRST
        private void buttonFirst_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            resetLijst();
            index = 0;
            displayDocentID(LijstDocenten.First().docentID);
            schrijfInfo("dit is de 1ste record");
        }
        //NEXT
        private void buttonNext_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            resetLijst();
            
            if (index < LijstDocenten.Count - 1)
                {
                    index++;
                }
            else
                {
                    index = 0;
                }
            tblDocent docent = LijstDocenten[index];
            long volgendeDocentID = Convert.ToInt64(docent.docentID);
            displayDocentID(volgendeDocentID);
                               
        }
        //PREVIOUS
        private void buttonPrevious_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            resetLijst();

            if (index > 0)
                {
                    index--;
                }
            else
                {
                    index = 0;
                }
            tblDocent docent = LijstDocenten[index];
            long vorigeDocentID = Convert.ToInt64(docent.docentID);

            displayDocentID(vorigeDocentID);
        }
        //LAST
        private void buttonLast_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            resetLijst();
            tblDocent docent = LijstDocenten[LijstDocenten.Count-1];
            long laatsteDocentID = Convert.ToInt64(docent.docentID);
            displayDocentID(laatsteDocentID);
            index = LijstDocenten.Count - 1;
            schrijfInfo("dit is de laatste record");
           
        }
        //ADD
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            setWegschrijven(false);
            resetLijst();
            tblDocent nieuweDocent = new tblDocent();
            nieuweDocent.docentVoornaam = getVoornaamDocent();
            nieuweDocent.docentNaam = getNaamDocent();
            if (getWegschrijven() == true)
                {
                    DB.SubmitChanges();
                    displayDocentID(nieuweDocent.docentID);
                    schrijfInfo("nieuwe docent wordt weggeschreven");
                }
            resetLijst();
            DB.tblDocents.InsertOnSubmit(nieuweDocent);
            DB.SubmitChanges();
            displayDocentID(nieuweDocent.docentID);
            buttonAdd.Enabled = false;
            setWegschrijven(false);
        }
        //CLEAR
        private void buttonClear_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            textVnDocent.Text = "";
            textFnDocent.Text = "";
            textID.Text = "";
            buttonAdd.Enabled = true;
            schrijfInfo("velden zijn leeggemaakt");

        }
        //EDIT
        private void buttonEdit_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            setWegschrijven(false);
            long huidigeID = Convert.ToInt64(textID.Text);
            tblDocent gekozen = (from tblDocent in DB.tblDocents
                                 where tblDocent.docentID == huidigeID
                                 select tblDocent).First();
            gekozen.docentVoornaam = getVoornaamDocent();
            gekozen.docentNaam = getNaamDocent();
            if (getWegschrijven() == true)
            {
                DB.SubmitChanges();
                displayDocentID(gekozen.docentID);
                schrijfInfo("wijzigingen worden weggeschreven");
            }
            else
            {
                schrijfInfo("wegschrijven = FALSE");
                resetLijst();
            }
                resetLijst();
                setWegschrijven(false);
            
        }
        //DELETE
        private void buttonDelete_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            long huidigeID = Convert.ToInt64(textID.Text);
            var q = (from tblDocent in DB.tblDocents
                                 where tblDocent.docentID == huidigeID
                                 select tblDocent);
            MessageBox.Show("u staat op het punt deze record te verwijderen!");
            DB.tblDocents.DeleteOnSubmit(q.First());
            DB.SubmitChanges();
            buttonFirst_Click(null, null);
        }
        //SEARCH
        private void buttonSearch_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            resetLijst();
           comboSearchResults.DataSource = null;
           String gezocht = textInputSearch.Text;
           if (LijstDocenten.Count > 0)
               
               {
                   IQueryable query = (from tblDocent in DB.tblDocents
                                            where tblDocent.docentNaam.Trim() == gezocht
                                            || tblDocent.docentVoornaam.Trim() == gezocht
                                            select tblDocent.docentNaam.Trim()+" "+
                                            tblDocent.docentVoornaam.Trim()+"/"+tblDocent.docentID);
                   comboSearchResults.DataSource = query;
                   int match = comboSearchResults.Items.Count;
                   textMatches.Text = "matches: " + Convert.ToString(match);
                                    
               }
        }
        //ADMIT
        private void butAdmit_Click(object sender, EventArgs e)
        {
            buttonAdd.Enabled = false;
            maakInfoLeeg();
            int plaats = comboSearchResults.SelectedItem.ToString().IndexOf("/");
            string id = (comboSearchResults.SelectedItem.ToString().Remove(0, plaats + 1));
            displayDocentID(Convert.ToInt64(id));
            schrijfInfo("velden ingevuld door zoekmachine");
               
        }

        //*************************************************************andere methoden
        //RESET LIJST
        private void resetLijst()
        {
           
            LijstDocenten = DB.tblDocents.ToList();
            tblDocent docent = LijstDocenten[index];
           
            textTotaal.Text = "aantal docenten: "+ Convert.ToString(LijstDocenten.Count());
            
        }
        //DISPLAY met ID number
        private void displayDocentID(long x)
        {
            resetLijst();
            //String tekst = "";
            try
                {
                    tblDocent gekozen = (from tblDocent in DB.tblDocents
                                         where tblDocent.docentID == x
                                         select tblDocent).First();
                    textVnDocent.Text = gekozen.docentVoornaam;
                    textFnDocent.Text = gekozen.docentNaam;

                    //tekst = Convert.ToString(gekozen.docentID);
                    textID.Text = Convert.ToString(gekozen.docentID);
                }
            catch
                {
                   
                }
        }
     
        //naam Docent op de juiste lengte
        private String getNaamDocent()
        {
            if (textFnDocent.Text.Trim() == "")
                {
                    setWegschrijven(false);
                    schrijfInfo("field NAME is empty !!");
                }
            else
                {
                    setWegschrijven(true);

                }
            return textFnDocent.Text.PadRight(20).Substring(0,20);
        }
       //setter of er mag weggeschreven worden of niet.
        private void setWegschrijven(Boolean b)
        {
            wegschrijven = b;
        }
        //getter of er mag weggeschreven worden of niet.
        private Boolean getWegschrijven()
        {
            return wegschrijven;
        }
        //voornaam Docent op de juiste lengte
        private String getVoornaamDocent()
        {
            if (textVnDocent.Text.Trim() == null)
                {
                    setWegschrijven(false);
                    textInfo.Text = "FIELD FIRST NAME is empty !!";
                }
            else
                {
                    setWegschrijven(true);

                }
            return textVnDocent.Text.PadRight(20).Substring(0,20);
        }
        //maak INFO textVeld leeg
        private void maakInfoLeeg()
        {
            textInfo.Text = "";
        }
        //schrijf info
        private void schrijfInfo(String info)
        {
            textInfo.Text = info;
        }
        //************************************************************lege methoden
        private void textVnDocent_TextChanged(object sender, EventArgs e)
        {

        }
        private void textID_TextChanged(object sender, EventArgs e)
        {

        }
        private void textTotaal_TextChanged(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter_1(object sender, EventArgs e)
        {

        }

        private void textInputSearch_TextChanged(object sender, EventArgs e)
        {

        }

        private void comboSearchResults_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboSearchResults.SelectedIndex != -1)
            {
                //int lengte = comboSearchResults.SelectedItem.ToString().Length;
                //int plaats = comboSearchResults.SelectedItem.ToString().IndexOf("/");
                //string id = (comboSearchResults.SelectedItem.ToString().Remove(0, plaats+1));
                //displayDocentID(Convert.ToInt64(id));
               
            }
        }

        private void textInfo_TextChanged(object sender, EventArgs e)
        {

        }

            
    }
}
